package com.aabte.lock.jedis.v3;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.Transaction;

/**
 * Redis事务剥离出来的业务逻辑代码
 */
public interface IRedisTransactionProcess {

    /**
     * 此方法判断是否还满足条件，是否还需要继续尝试执行
     * @param jedis
     * @param lockKey
     * @return
     */
    boolean invokeBeforeProcess(Jedis jedis, String lockKey);

    /**
     * 业务操作方法
     * @param transaction
     * @param lockKey
     */
    void invokeProcess(Transaction transaction, String lockKey);

    /**
     * 事务提交失败，回滚逻辑
     * @param jedis
     * @param lockKey
     */
    void rollback(Jedis jedis, String lockKey);

    /**
     * 事务提交成功之后，执行的逻辑
     * @param jedis
     * @param lockKey
     */
    void invokePostProcess(Jedis jedis, String lockKey);

}
